\section{Deliverables}
To aid ourselves during the project we constructed several tools to make all the
testing easier and (for a large part) automated. In this section we will give a
brief overview of the tools we developed and used during the project. For
complete step-by-step instructions on obtaining, building and using our code,
please see Appendix \ref{build_instructions}.
 
\subsection{Quake 3 module}
We wrote a \textit{module} (\textit{mod} for short) for Quake III Arena. We also
made some minor adjustments to Quake III itself in the form of a patch. The
combination of these two things allow the user to run tests and experiments
involving the evolution of Quake III bots.

In general, an experiment will consist of a set number of rounds of gameplay
with a set number of bots playing. The initial characteristics of the bots will
be random. After each round, pairs of bots are selected for breeding. Bots are
assigned a fitness using a fitness-function. Bots with a higher fitness are more
likely to be chosen for breeding. Each pair of parents will produce a pair of
children. The parents' genes (characteristics) are copied to the children using
\textit{crossover}. Using this technique, first a set of genes from one parent
is selected for a child, then a set of genes from the other parent (for the same
child), and so on. The value of one characteristic in one of the parents is
copied to exactly one child, the other child inherits the value for that
characteristic from the other parent. After crossover has taken place, the genes
of the children will be mutated. In earlier versions of our code, this happened
to only a few genes, which would then change to completely random new values. In
newer versions, all genes are mutated using a gaussian distribution
with a very low standard deviation (typically less than 0.05), causing very
slight mutations everywhere.

After all the children have been generated in this manner, all the children are
put into a new round, and they fight things out until the end of that round, at
which time the process repeats itself and these children become parents
themselves. The characteristics and the performance of the bots are written to
files after each round.

As a user, you can customize:
\begin{itemize}
\item
A time or score limit to the round - once the limit is hit, a round will end;
\item
The level all the rounds are held in;
\item
The number of bots that play each round;
\item
The number of rounds played;
\item
The crossover and mutation rates (in later versions, the standard deviation of
the gaussian distribution);
\item
Whether the bots should have evolving preferences for certain weapons;
\item
The dependencies model (which phenotypes depend on which genotypes) used;
\item
The fitness-function used to evaluate the bots' fitness
\end{itemize}
 
\subsection{Grapher}
We also wrote a small parser and grapher program in Ruby. It can use the output
generated by the Quake 3 module to graph the average development of separate
characteristics of the bots over time. This is very useful in determining how
effective the current settings are.
